Micron Document
🎖️GitЯра🎖️

Node / meshcore / MeshCore / files / src / helpers / ui / OLEDDisplay.cpp

Displaying Raw • Download

src/helpers/ui/OLEDDisplay.cpp 5732b2edd8563281ef7d344cd6517f969ca160ab (5732b2ed) Text, 33.52 KB

T8b949e/**
* The MIT License (MIT)
*
* Copyright (c) 2018 by ThingPulse, Daniel Eichhorn
* Copyright (c) 2018 by Fabrice Weinberg
* Copyright (c) 2019 by Helmut Tschemernjak - www.radioshuttle.de
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* ThingPulse invests considerable time and money to develop these open source libraries.
* Please support us by buying our products (and not the clones) from
* https://thingpulse.com
*
*/

T8b949e/*
* TODO Helmut
* - test/finish dislplay.printf() on mbed-os
* - Finish _putc with drawLogBuffer when running display
*/

Tff7b72#Tff7b72include T8b949e"OLEDDisplay.h"

Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3OLEDDisplayTb4b4b4(Tb4b4b4) Tb4b4b4{

Te6edf3displayWidth Tff7b72= T79c0ff128Tb4b4b4;
Te6edf3displayHeight Tff7b72= T79c0ff64Tb4b4b4;
Te6edf3displayBufferSize Tff7b72= Te6edf3displayWidth Tff7b72* Te6edf3displayHeight Tff7b72/ T79c0ff8Tb4b4b4;
Te6edf3color Tff7b72= Te6edf3WHITETb4b4b4;
Te6edf3geometry Tff7b72= Te6edf3GEOMETRY_128_64Tb4b4b4;
Te6edf3textAlignment Tff7b72= Te6edf3TEXT_ALIGN_LEFTTb4b4b4;
Te6edf3fontData Tff7b72= Te6edf3ArialMT_Plain_10Tb4b4b4;
Te6edf3fontTableLookupFunction Tff7b72= Te6edf3DefaultFontTableLookupTb4b4b4;
Te6edf3buffer Tff7b72= Tffa657NULLTb4b4b4;
Tff7b72#Tff7b72ifdef OLEDDISPLAY_DOUBLE_BUFFER
Te6edf3buffer_back Tff7b72= Tffa657NULLTb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

Te6edf3OLEDDisplayTff7b72:Tff7b72:Tff7b72~Te6edf3OLEDDisplayTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3endTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3allocateBufferTb4b4b4(Tb4b4b4) Tb4b4b4{

Te6edf3logBufferSize Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3logBufferFilled Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3logBufferLine Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3logBufferMaxLines Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3logBuffer Tff7b72= Tffa657NULLTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3connectTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DEBUG_OLEDDISPLAYTb4b4b4(Ta5d6ff"Ta5d6ff[OLEDDISPLAY][init] Can't establish connection to displayTffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

Tff7b72ifTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3bufferTff7b72=Tff7b72=Tffa657NULLTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer Tff7b72= Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4) Te6edf3mallocTb4b4b4(Tb4b4b4(Tff7b72sizeofTb4b4b4(Tffa657uint8_tTb4b4b4) Tff7b72* Te6edf3displayBufferSizeTb4b4b4) Tff7b72+ Te6edf3BufferOffsetTb4b4b4)Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer Tff7b72+Tff7b72= Te6edf3BufferOffsetTb4b4b4;

Tff7b72ifTb4b4b4(Tff7b72!Tff7b72thisTff7b72-Tff7b72>Te6edf3bufferTb4b4b4) Tb4b4b4{
Te6edf3DEBUG_OLEDDISPLAYTb4b4b4(Ta5d6ff"Ta5d6ff[OLEDDISPLAY][init] Not enough memory to create displayTffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72ifdef OLEDDISPLAY_DOUBLE_BUFFER
Tff7b72ifTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_backTff7b72=Tff7b72=Tffa657NULLTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_back Tff7b72= Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4) Te6edf3mallocTb4b4b4(Tb4b4b4(Tff7b72sizeofTb4b4b4(Tffa657uint8_tTb4b4b4) Tff7b72* Te6edf3displayBufferSizeTb4b4b4) Tff7b72+ Te6edf3BufferOffsetTb4b4b4)Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_back Tff7b72+Tff7b72= Te6edf3BufferOffsetTb4b4b4;

Tff7b72ifTb4b4b4(Tff7b72!Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_backTb4b4b4) Tb4b4b4{
Te6edf3DEBUG_OLEDDISPLAYTb4b4b4(Ta5d6ff"Ta5d6ff[OLEDDISPLAY][init] Not enough memory to create back bufferTffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3freeTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer Tff7b72- Te6edf3BufferOffsetTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif

Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3initTb4b4b4(Tb4b4b4) Tb4b4b4{

Te6edf3BufferOffset Tff7b72= Te6edf3getBufferOffsetTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72ifTb4b4b4(Tff7b72!Te6edf3allocateBufferTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

Te6edf3sendInitCommandsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3resetDisplayTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3endTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3bufferTb4b4b4) Tb4b4b4{ Te6edf3freeTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer Tff7b72- Te6edf3BufferOffsetTb4b4b4)Tb4b4b4; Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer Tff7b72= Tffa657NULLTb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72ifdef OLEDDISPLAY_DOUBLE_BUFFER
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_backTb4b4b4) Tb4b4b4{ Te6edf3freeTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_back Tff7b72- Te6edf3BufferOffsetTb4b4b4)Tb4b4b4; Tff7b72thisTff7b72-Tff7b72>Te6edf3buffer_back Tff7b72= Tffa657NULLTb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3logBuffer Tff7b72!Tff7b72= Tffa657NULLTb4b4b4) Tb4b4b4{ Te6edf3freeTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4)Tb4b4b4; Tff7b72thisTff7b72-Tff7b72>Te6edf3logBuffer Tff7b72= Tffa657NULLTb4b4b4; Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3resetDisplayTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef OLEDDISPLAY_DOUBLE_BUFFER
Te6edf3memsetTb4b4b4(Te6edf3buffer_backTb4b4b4, T79c0ff1Tb4b4b4, Te6edf3displayBufferSizeTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3displayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setColorTb4b4b4(Te6edf3OLEDDISPLAY_COLOR Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3color Tff7b72= Te6edf3colorTb4b4b4;
Tb4b4b4}

Te6edf3OLEDDISPLAY_COLOR Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3getColorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTff7b72-Tff7b72>Te6edf3colorTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setPixelTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3x Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3x Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3y Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3y Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72|Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72^Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setPixelColorTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Te6edf3OLEDDISPLAY_COLOR Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3x Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3x Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3y Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3y Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72|Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72^Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3clearPixelTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3x Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3x Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3y Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3y Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72>Tff7b72> T79c0ff3Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72|Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72WHITETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72>Tff7b72> T79c0ff3Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72>Tff7b72> T79c0ff3Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72^Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}


T8b949e// Bresenham's algorithm - thx wikipedia and Adafruit_GFX
Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawLineTb4b4b4(Tffa657int16_t Te6edf3x0Tb4b4b4, Tffa657int16_t Te6edf3y0Tb4b4b4, Tffa657int16_t Te6edf3x1Tb4b4b4, Tffa657int16_t Te6edf3y1Tb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3steep Tff7b72= Te6edf3absTb4b4b4(Te6edf3y1 Tff7b72- Te6edf3y0Tb4b4b4) Tff7b72> Te6edf3absTb4b4b4(Te6edf3x1 Tff7b72- Te6edf3x0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3steepTb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Te6edf3_swap_int16_tTb4b4b4(Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3x0 Tff7b72> Te6edf3x1Tb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3x1Tb4b4b4)Tb4b4b4;
Te6edf3_swap_int16_tTb4b4b4(Te6edf3y0Tb4b4b4, Te6edf3y1Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657int16_t Te6edf3dxTb4b4b4, Te6edf3dyTb4b4b4;
Te6edf3dx Tff7b72= Te6edf3x1 Tff7b72- Te6edf3x0Tb4b4b4;
Te6edf3dy Tff7b72= Te6edf3absTb4b4b4(Te6edf3y1 Tff7b72- Te6edf3y0Tb4b4b4)Tb4b4b4;

Tffa657int16_t Te6edf3err Tff7b72= Te6edf3dx Tff7b72/ T79c0ff2Tb4b4b4;
Tffa657int16_t Te6edf3ystepTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3y0 Tff7b72< Te6edf3y1Tb4b4b4) Tb4b4b4{
Te6edf3ystep Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ystep Tff7b72= T79c0ff-1Tb4b4b4;
Tb4b4b4}

Tff7b72for Tb4b4b4(Tb4b4b4; Te6edf3x0Tff7b72<Tff7b72=Te6edf3x1Tb4b4b4; Te6edf3x0Tff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3steepTb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3y0Tb4b4b4, Te6edf3x0Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3err Tff7b72-Tff7b72= Te6edf3dyTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3err Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3y0 Tff7b72+Tff7b72= Te6edf3ystepTb4b4b4;
Te6edf3err Tff7b72+Tff7b72= Te6edf3dxTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawRectTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4) Tb4b4b4{
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3widthTb4b4b4)Tb4b4b4;
Te6edf3drawVerticalLineTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3drawVerticalLineTb4b4b4(Te6edf3x Tff7b72+ Te6edf3width Tff7b72- T79c0ff1Tb4b4b4, Te6edf3yTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3xTb4b4b4, Te6edf3y Tff7b72+ Te6edf3height Tff7b72- T79c0ff1Tb4b4b4, Te6edf3widthTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3fillRectTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int16_t Te6edf3x Tff7b72= Te6edf3xMoveTb4b4b4; Te6edf3x Tff7b72< Te6edf3xMove Tff7b72+ Te6edf3widthTb4b4b4; Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3drawVerticalLineTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yMoveTb4b4b4, Te6edf3heightTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawCircleTb4b4b4(Tffa657int16_t Te6edf3x0Tb4b4b4, Tffa657int16_t Te6edf3y0Tb4b4b4, Tffa657int16_t Te6edf3radiusTb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3x Tff7b72= T79c0ff0Tb4b4b4, Te6edf3y Tff7b72= Te6edf3radiusTb4b4b4;
Tffa657int16_t Te6edf3dp Tff7b72= T79c0ff1 Tff7b72- Te6edf3radiusTb4b4b4;
Tff7b72do Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3dp Tff7b72< T79c0ff0Tb4b4b4)
Te6edf3dp Tff7b72= Te6edf3dp Tff7b72+ Tb4b4b4(Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72+ T79c0ff3Tb4b4b4;
Tff7b72else
Te6edf3dp Tff7b72= Te6edf3dp Tff7b72+ Tb4b4b4(Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72- Tb4b4b4(Te6edf3yTff7b72-Tff7b72-Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72+ T79c0ff5Tb4b4b4;

Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3yTb4b4b4)Tb4b4b4; T8b949e//For the 8 octants
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3xTb4b4b4)Tb4b4b4;

Tb4b4b4} Tff7b72while Tb4b4b4(Te6edf3x Tff7b72< Te6edf3yTb4b4b4)Tb4b4b4;

Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3radiusTb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3radiusTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3radiusTb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0 Tff7b72- Te6edf3radiusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawCircleQuadsTb4b4b4(Tffa657int16_t Te6edf3x0Tb4b4b4, Tffa657int16_t Te6edf3y0Tb4b4b4, Tffa657int16_t Te6edf3radiusTb4b4b4, Tffa657uint8_t Te6edf3quadsTb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3x Tff7b72= T79c0ff0Tb4b4b4, Te6edf3y Tff7b72= Te6edf3radiusTb4b4b4;
Tffa657int16_t Te6edf3dp Tff7b72= T79c0ff1 Tff7b72- Te6edf3radiusTb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3x Tff7b72< Te6edf3yTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3dp Tff7b72< T79c0ff0Tb4b4b4)
Te6edf3dp Tff7b72= Te6edf3dp Tff7b72+ Tb4b4b4(Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72+ T79c0ff3Tb4b4b4;
Tff7b72else
Te6edf3dp Tff7b72= Te6edf3dp Tff7b72+ Tb4b4b4(Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72- Tb4b4b4(Te6edf3yTff7b72-Tff7b72-Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72+ T79c0ff5Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x1Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3xTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x2Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x4Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x8Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3xTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x1 Tff7b72&Tff7b72& Te6edf3quads Tff7b72& T79c0ff0x8Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72+ Te6edf3radiusTb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x4 Tff7b72&Tff7b72& Te6edf3quads Tff7b72& T79c0ff0x8Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3radiusTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x2 Tff7b72&Tff7b72& Te6edf3quads Tff7b72& T79c0ff0x4Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3radiusTb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3quads Tff7b72& T79c0ff0x1 Tff7b72&Tff7b72& Te6edf3quads Tff7b72& T79c0ff0x2Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0 Tff7b72- Te6edf3radiusTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}


Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3fillCircleTb4b4b4(Tffa657int16_t Te6edf3x0Tb4b4b4, Tffa657int16_t Te6edf3y0Tb4b4b4, Tffa657int16_t Te6edf3radiusTb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3x Tff7b72= T79c0ff0Tb4b4b4, Te6edf3y Tff7b72= Te6edf3radiusTb4b4b4;
Tffa657int16_t Te6edf3dp Tff7b72= T79c0ff1 Tff7b72- Te6edf3radiusTb4b4b4;
Tff7b72do Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3dp Tff7b72< T79c0ff0Tb4b4b4)
Te6edf3dp Tff7b72= Te6edf3dp Tff7b72+ Tb4b4b4(Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72+ T79c0ff3Tb4b4b4;
Tff7b72else
Te6edf3dp Tff7b72= Te6edf3dp Tff7b72+ Tb4b4b4(Te6edf3xTff7b72+Tff7b72+Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72- Tb4b4b4(Te6edf3yTff7b72-Tff7b72-Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72+ T79c0ff5Tb4b4b4;

Te6edf3drawHorizontalLineTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3yTb4b4b4, T79c0ff2Tff7b72*Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3xTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3yTb4b4b4, T79c0ff2Tff7b72*Te6edf3xTb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72- Te6edf3xTb4b4b4, T79c0ff2Tff7b72*Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3yTb4b4b4, Te6edf3y0 Tff7b72+ Te6edf3xTb4b4b4, T79c0ff2Tff7b72*Te6edf3yTb4b4b4)Tb4b4b4;


Tb4b4b4} Tff7b72while Tb4b4b4(Te6edf3x Tff7b72< Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3x0 Tff7b72- Te6edf3radiusTb4b4b4, Te6edf3y0Tb4b4b4, T79c0ff2 Tff7b72* Te6edf3radiusTb4b4b4)Tb4b4b4;

Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawTriangleTb4b4b4(Tffa657int16_t Te6edf3x0Tb4b4b4, Tffa657int16_t Te6edf3y0Tb4b4b4, Tffa657int16_t Te6edf3x1Tb4b4b4, Tffa657int16_t Te6edf3y1Tb4b4b4,
Tffa657int16_t Te6edf3x2Tb4b4b4, Tffa657int16_t Te6edf3y2Tb4b4b4) Tb4b4b4{
Te6edf3drawLineTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3y0Tb4b4b4, Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4)Tb4b4b4;
Te6edf3drawLineTb4b4b4(Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4, Te6edf3x2Tb4b4b4, Te6edf3y2Tb4b4b4)Tb4b4b4;
Te6edf3drawLineTb4b4b4(Te6edf3x2Tb4b4b4, Te6edf3y2Tb4b4b4, Te6edf3x0Tb4b4b4, Te6edf3y0Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3fillTriangleTb4b4b4(Tffa657int16_t Te6edf3x0Tb4b4b4, Tffa657int16_t Te6edf3y0Tb4b4b4, Tffa657int16_t Te6edf3x1Tb4b4b4, Tffa657int16_t Te6edf3y1Tb4b4b4,
Tffa657int16_t Te6edf3x2Tb4b4b4, Tffa657int16_t Te6edf3y2Tb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3aTb4b4b4, Te6edf3bTb4b4b4, Te6edf3yTb4b4b4, Te6edf3lastTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3y0 Tff7b72> Te6edf3y1Tb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3y0Tb4b4b4, Te6edf3y1Tb4b4b4)Tb4b4b4;
Te6edf3_swap_int16_tTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3x1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3y1 Tff7b72> Te6edf3y2Tb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3y2Tb4b4b4, Te6edf3y1Tb4b4b4)Tb4b4b4;
Te6edf3_swap_int16_tTb4b4b4(Te6edf3x2Tb4b4b4, Te6edf3x1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3y0 Tff7b72> Te6edf3y1Tb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3y0Tb4b4b4, Te6edf3y1Tb4b4b4)Tb4b4b4;
Te6edf3_swap_int16_tTb4b4b4(Te6edf3x0Tb4b4b4, Te6edf3x1Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3y0 Tff7b72=Tff7b72= Te6edf3y2Tb4b4b4) Tb4b4b4{
Te6edf3a Tff7b72= Te6edf3b Tff7b72= Te6edf3x0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3x1 Tff7b72< Te6edf3aTb4b4b4) Tb4b4b4{
Te6edf3a Tff7b72= Te6edf3x1Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3x1 Tff7b72> Te6edf3bTb4b4b4) Tb4b4b4{
Te6edf3b Tff7b72= Te6edf3x1Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3x2 Tff7b72< Te6edf3aTb4b4b4) Tb4b4b4{
Te6edf3a Tff7b72= Te6edf3x2Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3x2 Tff7b72> Te6edf3bTb4b4b4) Tb4b4b4{
Te6edf3b Tff7b72= Te6edf3x2Tb4b4b4;
Tb4b4b4}
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3aTb4b4b4, Te6edf3y0Tb4b4b4, Te6edf3b Tff7b72- Te6edf3a Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tffa657int16_t
Te6edf3dx01 Tff7b72= Te6edf3x1 Tff7b72- Te6edf3x0Tb4b4b4,
Te6edf3dy01 Tff7b72= Te6edf3y1 Tff7b72- Te6edf3y0Tb4b4b4,
Te6edf3dx02 Tff7b72= Te6edf3x2 Tff7b72- Te6edf3x0Tb4b4b4,
Te6edf3dy02 Tff7b72= Te6edf3y2 Tff7b72- Te6edf3y0Tb4b4b4,
Te6edf3dx12 Tff7b72= Te6edf3x2 Tff7b72- Te6edf3x1Tb4b4b4,
Te6edf3dy12 Tff7b72= Te6edf3y2 Tff7b72- Te6edf3y1Tb4b4b4;
Tffa657int32_t
Te6edf3sa Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3sb Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3y1 Tff7b72=Tff7b72= Te6edf3y2Tb4b4b4) Tb4b4b4{
Te6edf3last Tff7b72= Te6edf3y1Tb4b4b4; T8b949e// Include y1 scanline
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3last Tff7b72= Te6edf3y1 Tff7b72- T79c0ff1Tb4b4b4; T8b949e// Skip it
Tb4b4b4}

Tff7b72for Tb4b4b4(Te6edf3y Tff7b72= Te6edf3y0Tb4b4b4; Te6edf3y Tff7b72<Tff7b72= Te6edf3lastTb4b4b4; Te6edf3yTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3a Tff7b72= Te6edf3x0 Tff7b72+ Te6edf3sa Tff7b72/ Te6edf3dy01Tb4b4b4;
Te6edf3b Tff7b72= Te6edf3x0 Tff7b72+ Te6edf3sb Tff7b72/ Te6edf3dy02Tb4b4b4;
Te6edf3sa Tff7b72+Tff7b72= Te6edf3dx01Tb4b4b4;
Te6edf3sb Tff7b72+Tff7b72= Te6edf3dx02Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3a Tff7b72> Te6edf3bTb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3aTb4b4b4, Te6edf3yTb4b4b4, Te6edf3b Tff7b72- Te6edf3a Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3sa Tff7b72= Te6edf3dx12 Tff7b72* Tb4b4b4(Te6edf3y Tff7b72- Te6edf3y1Tb4b4b4)Tb4b4b4;
Te6edf3sb Tff7b72= Te6edf3dx02 Tff7b72* Tb4b4b4(Te6edf3y Tff7b72- Te6edf3y0Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tb4b4b4; Te6edf3y Tff7b72<Tff7b72= Te6edf3y2Tb4b4b4; Te6edf3yTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3a Tff7b72= Te6edf3x1 Tff7b72+ Te6edf3sa Tff7b72/ Te6edf3dy12Tb4b4b4;
Te6edf3b Tff7b72= Te6edf3x0 Tff7b72+ Te6edf3sb Tff7b72/ Te6edf3dy02Tb4b4b4;
Te6edf3sa Tff7b72+Tff7b72= Te6edf3dx12Tb4b4b4;
Te6edf3sb Tff7b72+Tff7b72= Te6edf3dx02Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3a Tff7b72> Te6edf3bTb4b4b4) Tb4b4b4{
Te6edf3_swap_int16_tTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3aTb4b4b4, Te6edf3yTb4b4b4, Te6edf3b Tff7b72- Te6edf3a Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawHorizontalLineTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657int16_t Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3y Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3y Tff7b72>Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Tff7b72returnTb4b4b4; Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3x Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3length Tff7b72+Tff7b72= Te6edf3xTb4b4b4;
Te6edf3x Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4( Tb4b4b4(Te6edf3x Tff7b72+ Te6edf3lengthTb4b4b4) Tff7b72> Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3length Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3xTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3length Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ Tff7b72returnTb4b4b4; Tb4b4b4}

Tffa657uint8_t Tff7b72* Te6edf3bufferPtr Tff7b72= Te6edf3bufferTb4b4b4;
Te6edf3bufferPtr Tff7b72+Tff7b72= Tb4b4b4(Te6edf3y Tff7b72>Tff7b72> T79c0ff3Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3bufferPtr Tff7b72+Tff7b72= Te6edf3xTb4b4b4;

Tffa657uint8_t Te6edf3drawBit Tff7b72= T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3y Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4;

Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Tff7b72while Tb4b4b4(Te6edf3lengthTff7b72-Tff7b72-Tb4b4b4) Tb4b4b4{
Tff7b72*Te6edf3bufferPtrTff7b72+Tff7b72+ Tff7b72|Tff7b72= Te6edf3drawBitTb4b4b4;
Tb4b4b4}Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3drawBit Tff7b72= Tff7b72~Te6edf3drawBitTb4b4b4; Tff7b72while Tb4b4b4(Te6edf3lengthTff7b72-Tff7b72-Tb4b4b4) Tb4b4b4{
Tff7b72*Te6edf3bufferPtrTff7b72+Tff7b72+ Tff7b72&Tff7b72= Te6edf3drawBitTb4b4b4;
Tb4b4b4}Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Tff7b72while Tb4b4b4(Te6edf3lengthTff7b72-Tff7b72-Tb4b4b4) Tb4b4b4{
Tff7b72*Te6edf3bufferPtrTff7b72+Tff7b72+ Tff7b72^Tff7b72= Te6edf3drawBitTb4b4b4;
Tb4b4b4}Tb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawVerticalLineTb4b4b4(Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657int16_t Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3x Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3x Tff7b72>Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3y Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3length Tff7b72+Tff7b72= Te6edf3yTb4b4b4;
Te6edf3y Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4( Tb4b4b4(Te6edf3y Tff7b72+ Te6edf3lengthTb4b4b4) Tff7b72> Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3length Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3length Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;


Tffa657uint8_t Te6edf3yOffset Tff7b72= Te6edf3y Tff7b72& T79c0ff7Tb4b4b4;
Tffa657uint8_t Te6edf3drawBitTb4b4b4;
Tffa657uint8_t Tff7b72*Te6edf3bufferPtr Tff7b72= Te6edf3bufferTb4b4b4;

Te6edf3bufferPtr Tff7b72+Tff7b72= Tb4b4b4(Te6edf3y Tff7b72>Tff7b72> T79c0ff3Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3bufferPtr Tff7b72+Tff7b72= Te6edf3xTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3yOffsetTb4b4b4) Tb4b4b4{
Te6edf3yOffset Tff7b72= T79c0ff8 Tff7b72- Te6edf3yOffsetTb4b4b4;
Te6edf3drawBit Tff7b72= Tff7b72~Tb4b4b4(T79c0ff0xFF Tff7b72>Tff7b72> Tb4b4b4(Te6edf3yOffsetTb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3length Tff7b72< Te6edf3yOffsetTb4b4b4) Tb4b4b4{
Te6edf3drawBit Tff7b72&Tff7b72= Tb4b4b4(T79c0ff0xFF Tff7b72>Tff7b72> Tb4b4b4(Te6edf3yOffset Tff7b72- Te6edf3lengthTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Tff7b72*Te6edf3bufferPtr Tff7b72|Tff7b72= Te6edf3drawBitTb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Tff7b72*Te6edf3bufferPtr Tff7b72&Tff7b72= Tff7b72~Te6edf3drawBitTb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Tff7b72*Te6edf3bufferPtr Tff7b72^Tff7b72= Te6edf3drawBitTb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3length Tff7b72< Te6edf3yOffsetTb4b4b4) Tff7b72returnTb4b4b4;

Te6edf3length Tff7b72-Tff7b72= Te6edf3yOffsetTb4b4b4;
Te6edf3bufferPtr Tff7b72+Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3length Tff7b72>Tff7b72= T79c0ff8Tb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4:
Tff7b72case Tff7b72BLACKTb4b4b4:
Te6edf3drawBit Tff7b72= Tb4b4b4(Te6edf3color Tff7b72=Tff7b72= Te6edf3WHITETb4b4b4) Tff7b72? T79c0ff0xFF Tff7b72: T79c0ff0x00Tb4b4b4;
Tff7b72do Tb4b4b4{
Tff7b72*Te6edf3bufferPtr Tff7b72= Te6edf3drawBitTb4b4b4;
Te6edf3bufferPtr Tff7b72+Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3length Tff7b72-Tff7b72= T79c0ff8Tb4b4b4;
Tb4b4b4} Tff7b72while Tb4b4b4(Te6edf3length Tff7b72>Tff7b72= T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4:
Tff7b72do Tb4b4b4{
Tff7b72*Te6edf3bufferPtr Tff7b72= Tff7b72~Tb4b4b4(Tff7b72*Te6edf3bufferPtrTb4b4b4)Tb4b4b4;
Te6edf3bufferPtr Tff7b72+Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3length Tff7b72-Tff7b72= T79c0ff8Tb4b4b4;
Tb4b4b4} Tff7b72while Tb4b4b4(Te6edf3length Tff7b72>Tff7b72= T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3drawBit Tff7b72= Tb4b4b4(T79c0ff1 Tff7b72<Tff7b72< Tb4b4b4(Te6edf3length Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4) Tff7b72- T79c0ff1Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Tff7b72*Te6edf3bufferPtr Tff7b72|Tff7b72= Te6edf3drawBitTb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Tff7b72*Te6edf3bufferPtr Tff7b72&Tff7b72= Tff7b72~Te6edf3drawBitTb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Tff7b72*Te6edf3bufferPtr Tff7b72^Tff7b72= Te6edf3drawBitTb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawProgressBarTb4b4b4(Tffa657uint16_t Te6edf3xTb4b4b4, Tffa657uint16_t Te6edf3yTb4b4b4, Tffa657uint16_t Te6edf3widthTb4b4b4, Tffa657uint16_t Te6edf3heightTb4b4b4, Tffa657uint8_t Te6edf3progressTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3radius Tff7b72= Te6edf3height Tff7b72/ T79c0ff2Tb4b4b4;
Tffa657uint16_t Te6edf3xRadius Tff7b72= Te6edf3x Tff7b72+ Te6edf3radiusTb4b4b4;
Tffa657uint16_t Te6edf3yRadius Tff7b72= Te6edf3y Tff7b72+ Te6edf3radiusTb4b4b4;
Tffa657uint16_t Te6edf3doubleRadius Tff7b72= T79c0ff2 Tff7b72* Te6edf3radiusTb4b4b4;
Tffa657uint16_t Te6edf3innerRadius Tff7b72= Te6edf3radius Tff7b72- T79c0ff2Tb4b4b4;

Te6edf3setColorTb4b4b4(Te6edf3WHITETb4b4b4)Tb4b4b4;
Te6edf3drawCircleQuadsTb4b4b4(Te6edf3xRadiusTb4b4b4, Te6edf3yRadiusTb4b4b4, Te6edf3radiusTb4b4b4, T79c0ff0b00000110Tb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3xRadiusTb4b4b4, Te6edf3yTb4b4b4, Te6edf3width Tff7b72- Te6edf3doubleRadius Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3drawHorizontalLineTb4b4b4(Te6edf3xRadiusTb4b4b4, Te6edf3y Tff7b72+ Te6edf3heightTb4b4b4, Te6edf3width Tff7b72- Te6edf3doubleRadius Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3drawCircleQuadsTb4b4b4(Te6edf3x Tff7b72+ Te6edf3width Tff7b72- Te6edf3radiusTb4b4b4, Te6edf3yRadiusTb4b4b4, Te6edf3radiusTb4b4b4, T79c0ff0b00001001Tb4b4b4)Tb4b4b4;

Tffa657uint16_t Te6edf3maxProgressWidth Tff7b72= Tb4b4b4(Te6edf3width Tff7b72- Te6edf3doubleRadius Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72* Te6edf3progress Tff7b72/ T79c0ff100Tb4b4b4;

Te6edf3fillCircleTb4b4b4(Te6edf3xRadiusTb4b4b4, Te6edf3yRadiusTb4b4b4, Te6edf3innerRadiusTb4b4b4)Tb4b4b4;
Te6edf3fillRectTb4b4b4(Te6edf3xRadius Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3y Tff7b72+ T79c0ff2Tb4b4b4, Te6edf3maxProgressWidthTb4b4b4, Te6edf3height Tff7b72- T79c0ff3Tb4b4b4)Tb4b4b4;
Te6edf3fillCircleTb4b4b4(Te6edf3xRadius Tff7b72+ Te6edf3maxProgressWidthTb4b4b4, Te6edf3yRadiusTb4b4b4, Te6edf3innerRadiusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawFastImageTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4, Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3imageTb4b4b4) Tb4b4b4{
Te6edf3drawInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMoveTb4b4b4, Te6edf3widthTb4b4b4, Te6edf3heightTb4b4b4, Te6edf3imageTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawXbmTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4, Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3xbmTb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3widthInXbm Tff7b72= Tb4b4b4(Te6edf3width Tff7b72+ T79c0ff7Tb4b4b4) Tff7b72/ T79c0ff8Tb4b4b4;
Tffa657uint8_t Te6edf3data Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72forTb4b4b4(Tffa657int16_t Te6edf3y Tff7b72= T79c0ff0Tb4b4b4; Te6edf3y Tff7b72< Te6edf3heightTb4b4b4; Te6edf3yTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72forTb4b4b4(Tffa657int16_t Te6edf3x Tff7b72= T79c0ff0Tb4b4b4; Te6edf3x Tff7b72< Te6edf3widthTb4b4b4; Te6edf3xTff7b72+Tff7b72+ Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3x Tff7b72& T79c0ff7Tb4b4b4) Tb4b4b4{
Te6edf3data Tff7b72>Tff7b72>Tff7b72= T79c0ff1Tb4b4b4; T8b949e// Move a bit
Tb4b4b4} Tff7b72else Tb4b4b4{ T8b949e// Read new data every 8 bit
Te6edf3data Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3xbm Tff7b72+ Tb4b4b4(Te6edf3x Tff7b72/ T79c0ff8Tb4b4b4) Tff7b72+ Te6edf3y Tff7b72* Te6edf3widthInXbmTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// if there is a bit draw it
Tff7b72if Tb4b4b4(Te6edf3data Tff7b72& T79c0ff0x01Tb4b4b4) Tb4b4b4{
Te6edf3setPixelTb4b4b4(Te6edf3xMove Tff7b72+ Te6edf3xTb4b4b4, Te6edf3yMove Tff7b72+ Te6edf3yTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawIco16x16Tb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3icoTb4b4b4, Tffa657bool Te6edf3inverseTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3dataTb4b4b4;

Tff7b72forTb4b4b4(Tffa657int16_t Te6edf3y Tff7b72= T79c0ff0Tb4b4b4; Te6edf3y Tff7b72< T79c0ff16Tb4b4b4; Te6edf3yTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3data Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3ico Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72<Tff7b72< T79c0ff1Tb4b4b4)Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3pgm_read_byteTb4b4b4(Te6edf3ico Tff7b72+ Tb4b4b4(Te6edf3y Tff7b72<Tff7b72< T79c0ff1Tb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72<Tff7b72< T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72forTb4b4b4(Tffa657int16_t Te6edf3x Tff7b72= T79c0ff0Tb4b4b4; Te6edf3x Tff7b72< T79c0ff16Tb4b4b4; Te6edf3xTff7b72+Tff7b72+ Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3data Tff7b72& T79c0ff0x01Tb4b4b4) Tff7b72^ Te6edf3inverseTb4b4b4) Tb4b4b4{
Te6edf3setPixelColorTb4b4b4(Te6edf3xMove Tff7b72+ Te6edf3xTb4b4b4, Te6edf3yMove Tff7b72+ Te6edf3yTb4b4b4, Te6edf3WHITETb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3setPixelColorTb4b4b4(Te6edf3xMove Tff7b72+ Te6edf3xTb4b4b4, Te6edf3yMove Tff7b72+ Te6edf3yTb4b4b4, Te6edf3BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3data Tff7b72>Tff7b72>Tff7b72= T79c0ff1Tb4b4b4; T8b949e// Move a bit
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawStringInternalTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3textTb4b4b4, Tffa657uint16_t Te6edf3textLengthTb4b4b4, Tffa657uint16_t Te6edf3textWidthTb4b4b4, Tffa657bool Te6edf3utf8Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3textHeight Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3HEIGHT_POSTb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3firstChar Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3FIRST_CHAR_POSTb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3sizeOfJumpTable Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3CHAR_NUM_POSTb4b4b4) Tff7b72* Te6edf3JUMPTABLE_BYTESTb4b4b4;

Tffa657uint16_t Te6edf3cursorX Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3cursorY Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3charCount Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72switch Tb4b4b4(Te6edf3textAlignmentTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72TEXT_ALIGN_CENTER_BOTHTb4b4b4:
Te6edf3yMove Tff7b72-Tff7b72= Te6edf3textHeight Tff7b72>Tff7b72> T79c0ff1Tb4b4b4;
T8b949e// Fallthrough
Tff7b72case Tff7b72TEXT_ALIGN_CENTERTb4b4b4:
Te6edf3xMove Tff7b72-Tff7b72= Te6edf3textWidth Tff7b72>Tff7b72> T79c0ff1Tb4b4b4; T8b949e// divide by 2
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TEXT_ALIGN_RIGHTTb4b4b4:
Te6edf3xMove Tff7b72-Tff7b72= Te6edf3textWidthTb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TEXT_ALIGN_LEFTTb4b4b4:
Tff7b72breakTb4b4b4;
Tb4b4b4}

T8b949e// Don't draw anything if it is not on the screen.
Tff7b72if Tb4b4b4(Te6edf3xMove Tff7b72+ Te6edf3textWidth Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3xMove Tff7b72>Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4) Tb4b4b4) Tb4b4b4{Tff7b72return T79c0ff0Tb4b4b4;Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3yMove Tff7b72+ Te6edf3textHeight Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3yMove Tff7b72>Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{Tff7b72return T79c0ff0Tb4b4b4;Tb4b4b4}

Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3j Tff7b72= T79c0ff0Tb4b4b4; Te6edf3j Tff7b72< Te6edf3textLengthTb4b4b4; Te6edf3jTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657int16_t Te6edf3xPos Tff7b72= Te6edf3xMove Tff7b72+ Te6edf3cursorXTb4b4b4;
Tffa657int16_t Te6edf3yPos Tff7b72= Te6edf3yMove Tff7b72+ Te6edf3cursorYTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3xPos Tff7b72> Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72breakTb4b4b4; T8b949e// no need to continue
Te6edf3charCountTff7b72+Tff7b72+Tb4b4b4;

Tffa657uint8_t Te6edf3codeTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3utf8Tb4b4b4) Tb4b4b4{
Te6edf3code Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3fontTableLookupFunctionTb4b4b4)Tb4b4b4(Te6edf3textTb4b4b4[Te6edf3jTb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3code Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72continueTb4b4b4;
Tb4b4b4} Tff7b72else
Te6edf3code Tff7b72= Te6edf3textTb4b4b4[Te6edf3jTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3code Tff7b72>Tff7b72= Te6edf3firstCharTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3charCode Tff7b72= Te6edf3code Tff7b72- Te6edf3firstCharTb4b4b4;

T8b949e// 4 Bytes per char code
Tffa657uint8_t Te6edf3msbJumpToChar Tff7b72= Te6edf3pgm_read_byteTb4b4b4( Te6edf3fontData Tff7b72+ Te6edf3JUMPTABLE_START Tff7b72+ Te6edf3charCode Tff7b72* Te6edf3JUMPTABLE_BYTES Tb4b4b4)Tb4b4b4; T8b949e// MSB \ JumpAddress
Tffa657uint8_t Te6edf3lsbJumpToChar Tff7b72= Te6edf3pgm_read_byteTb4b4b4( Te6edf3fontData Tff7b72+ Te6edf3JUMPTABLE_START Tff7b72+ Te6edf3charCode Tff7b72* Te6edf3JUMPTABLE_BYTES Tff7b72+ Te6edf3JUMPTABLE_LSBTb4b4b4)Tb4b4b4; T8b949e// LSB /
Tffa657uint8_t Te6edf3charByteSize Tff7b72= Te6edf3pgm_read_byteTb4b4b4( Te6edf3fontData Tff7b72+ Te6edf3JUMPTABLE_START Tff7b72+ Te6edf3charCode Tff7b72* Te6edf3JUMPTABLE_BYTES Tff7b72+ Te6edf3JUMPTABLE_SIZETb4b4b4)Tb4b4b4; T8b949e// Size
Tffa657uint8_t Te6edf3currentCharWidth Tff7b72= Te6edf3pgm_read_byteTb4b4b4( Te6edf3fontData Tff7b72+ Te6edf3JUMPTABLE_START Tff7b72+ Te6edf3charCode Tff7b72* Te6edf3JUMPTABLE_BYTES Tff7b72+ Te6edf3JUMPTABLE_WIDTHTb4b4b4)Tb4b4b4; T8b949e// Width

T8b949e// Test if the char is drawable
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3msbJumpToChar Tff7b72=Tff7b72= T79c0ff255 Tff7b72&Tff7b72& Te6edf3lsbJumpToChar Tff7b72=Tff7b72= T79c0ff255Tb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// Get the position of the char data
Tffa657uint16_t Te6edf3charDataPosition Tff7b72= Te6edf3JUMPTABLE_START Tff7b72+ Te6edf3sizeOfJumpTable Tff7b72+ Tb4b4b4(Tb4b4b4(Te6edf3msbJumpToChar Tff7b72<Tff7b72< T79c0ff8Tb4b4b4) Tff7b72+ Te6edf3lsbJumpToCharTb4b4b4)Tb4b4b4;
Te6edf3drawInternalTb4b4b4(Te6edf3xPosTb4b4b4, Te6edf3yPosTb4b4b4, Te6edf3currentCharWidthTb4b4b4, Te6edf3textHeightTb4b4b4, Te6edf3fontDataTb4b4b4, Te6edf3charDataPositionTb4b4b4, Te6edf3charByteSizeTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3cursorX Tff7b72+Tff7b72= Te6edf3currentCharWidthTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3charCountTb4b4b4;
Tb4b4b4}


Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawStringTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tff7b72const Te6edf3String Tff7b72&Te6edf3strUserTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3lineHeight Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3HEIGHT_POSTb4b4b4)Tb4b4b4;

T8b949e// char* text must be freed!
Tffa657charTff7b72* Te6edf3text Tff7b72= Te6edf3strdupTb4b4b4(Te6edf3strUserTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3textTb4b4b4) Tb4b4b4{
Te6edf3DEBUG_OLEDDISPLAYTb4b4b4(Ta5d6ff"Ta5d6ff[OLEDDISPLAY][drawString] Can't allocate char array.Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}

Tffa657uint16_t Te6edf3yOffset Tff7b72= T79c0ff0Tb4b4b4;
T8b949e// If the string should be centered vertically too
T8b949e// we need to now how heigh the string is.
Tff7b72if Tb4b4b4(Te6edf3textAlignment Tff7b72=Tff7b72= Te6edf3TEXT_ALIGN_CENTER_BOTHTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3lb Tff7b72= T79c0ff0Tb4b4b4;
T8b949e// Find number of linebreaks in text
Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3iTff7b72=T79c0ff0Tb4b4b4;Te6edf3textTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!Tff7b72= T79c0ff0Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3lb Tff7b72+Tff7b72= Tb4b4b4(Te6edf3textTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= T79c0ff10Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Calculate center
Te6edf3yOffset Tff7b72= Tb4b4b4(Te6edf3lb Tff7b72* Te6edf3lineHeightTb4b4b4) Tff7b72/ T79c0ff2Tb4b4b4;
Tb4b4b4}

Tffa657uint16_t Te6edf3charDrawn Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3line Tff7b72= T79c0ff0Tb4b4b4;
Tffa657charTff7b72* Te6edf3textPart Tff7b72= Te6edf3strtokTb4b4b4(Te6edf3textTb4b4b4,Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3textPart Tff7b72!Tff7b72= Tffa657NULLTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3length Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3textPartTb4b4b4)Tb4b4b4;
Te6edf3charDrawn Tff7b72+Tff7b72= Te6edf3drawStringInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMove Tff7b72- Te6edf3yOffset Tff7b72+ Tb4b4b4(Te6edf3lineTff7b72+Tff7b72+Tb4b4b4) Tff7b72* Te6edf3lineHeightTb4b4b4, Te6edf3textPartTb4b4b4, Te6edf3lengthTb4b4b4, Te6edf3getStringWidthTb4b4b4(Te6edf3textPartTb4b4b4, Te6edf3lengthTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3textPart Tff7b72= Te6edf3strtokTb4b4b4(Tffa657NULLTb4b4b4, Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3freeTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3charDrawnTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawStringfTb4b4b4( Tffa657int16_t Te6edf3xTb4b4b4, Tffa657int16_t Te6edf3yTb4b4b4, Tffa657charTff7b72* Te6edf3bufferTb4b4b4, Te6edf3String Te6edf3formatTb4b4b4, Tb4b4b4.Tb4b4b4.Tb4b4b4. Tb4b4b4)
Tb4b4b4{
Tffa657va_list Te6edf3myargsTb4b4b4;
Te6edf3va_startTb4b4b4(Te6edf3myargsTb4b4b4, Te6edf3formatTb4b4b4)Tb4b4b4;
Te6edf3vsprintfTb4b4b4(Te6edf3bufferTb4b4b4, Te6edf3formatTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3myargsTb4b4b4)Tb4b4b4;
Te6edf3va_endTb4b4b4(Te6edf3myargsTb4b4b4)Tb4b4b4;
Te6edf3drawStringTb4b4b4( Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3buffer Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawStringMaxWidthTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tffa657uint16_t Te6edf3maxLineWidthTb4b4b4, Tff7b72const Te6edf3String Tff7b72&Te6edf3strUserTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3firstChar Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3FIRST_CHAR_POSTb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3lineHeight Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3HEIGHT_POSTb4b4b4)Tb4b4b4;

Tff7b72const Tffa657charTff7b72* Te6edf3text Tff7b72= Te6edf3strUserTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657uint16_t Te6edf3length Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3lastDrawnPos Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3lineNumber Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3strWidth Tff7b72= T79c0ff0Tb4b4b4;

Tffa657uint16_t Te6edf3preferredBreakpoint Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3widthAtBreakpoint Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3firstLineChars Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3drawStringResult Tff7b72= T79c0ff1Tb4b4b4; T8b949e// later tested for 0 == error, so initialize to 1

Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3lengthTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657char Te6edf3c Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3fontTableLookupFunctionTb4b4b4)Tb4b4b4(Te6edf3textTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72continueTb4b4b4;
Te6edf3strWidth Tff7b72+Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3JUMPTABLE_START Tff7b72+ Tb4b4b4(Te6edf3c Tff7b72- Te6edf3firstCharTb4b4b4) Tff7b72* Te6edf3JUMPTABLE_BYTES Tff7b72+ Te6edf3JUMPTABLE_WIDTHTb4b4b4)Tb4b4b4;

T8b949e// Always break on newline
Tff7b72if Tb4b4b4(Te6edf3textTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff\nTa5d6ff'Tb4b4b4) Tb4b4b4{
Te6edf3drawStringResult Tff7b72= Te6edf3drawStringInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMove Tff7b72+ Tb4b4b4(Te6edf3lineNumberTff7b72+Tff7b72+Tb4b4b4) Tff7b72* Te6edf3lineHeight Tb4b4b4, Tff7b72&Te6edf3textTb4b4b4[Te6edf3lastDrawnPosTb4b4b4]Tb4b4b4, Te6edf3i Tff7b72- Te6edf3lastDrawnPosTb4b4b4, Te6edf3strWidthTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3firstLineChars Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Te6edf3firstLineChars Tff7b72= Te6edf3iTb4b4b4;
Te6edf3lastDrawnPos Tff7b72= Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4;
Te6edf3strWidth Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3drawStringResult Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) T8b949e// we are past the display already?
Tff7b72breakTb4b4b4;
Tb4b4b4}

T8b949e// Always try to break on a space, dash or slash
Tff7b72if Tb4b4b4(Te6edf3textTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff Ta5d6ff' Tff7b72|Tff7b72| Te6edf3textTb4b4b4[Te6edf3iTb4b4b4]Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff-Ta5d6ff' Tff7b72|Tff7b72| Te6edf3textTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff/Ta5d6ff'Tb4b4b4) Tb4b4b4{
Te6edf3preferredBreakpoint Tff7b72= Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4;
Te6edf3widthAtBreakpoint Tff7b72= Te6edf3strWidthTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3strWidth Tff7b72>Tff7b72= Te6edf3maxLineWidthTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3preferredBreakpoint Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3preferredBreakpoint Tff7b72= Te6edf3iTb4b4b4;
Te6edf3widthAtBreakpoint Tff7b72= Te6edf3strWidthTb4b4b4;
Tb4b4b4}
Te6edf3drawStringResult Tff7b72= Te6edf3drawStringInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMove Tff7b72+ Tb4b4b4(Te6edf3lineNumberTff7b72+Tff7b72+Tb4b4b4) Tff7b72* Te6edf3lineHeight Tb4b4b4, Tff7b72&Te6edf3textTb4b4b4[Te6edf3lastDrawnPosTb4b4b4]Tb4b4b4, Te6edf3preferredBreakpoint Tff7b72- Te6edf3lastDrawnPosTb4b4b4, Te6edf3widthAtBreakpointTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3firstLineChars Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Te6edf3firstLineChars Tff7b72= Te6edf3preferredBreakpointTb4b4b4;
Te6edf3lastDrawnPos Tff7b72= Te6edf3preferredBreakpointTb4b4b4;
T8b949e// It is possible that we did not draw all letters to i so we need
T8b949e// to account for the width of the chars from `i - preferredBreakpoint`
T8b949e// by calculating the width we did not draw yet.
Te6edf3strWidth Tff7b72= Te6edf3strWidth Tff7b72- Te6edf3widthAtBreakpointTb4b4b4;
Te6edf3preferredBreakpoint Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3drawStringResult Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) T8b949e// we are past the display already?
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e// Draw last part if needed
Tff7b72if Tb4b4b4(Te6edf3drawStringResult Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3lastDrawnPos Tff7b72< Te6edf3lengthTb4b4b4) Tb4b4b4{
Te6edf3drawStringResult Tff7b72= Te6edf3drawStringInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMove Tff7b72+ Tb4b4b4(Te6edf3lineNumberTff7b72+Tff7b72+Tb4b4b4) Tff7b72* Te6edf3lineHeight Tb4b4b4, Tff7b72&Te6edf3textTb4b4b4[Te6edf3lastDrawnPosTb4b4b4]Tb4b4b4, Te6edf3length Tff7b72- Te6edf3lastDrawnPosTb4b4b4, Te6edf3getStringWidthTb4b4b4(Tff7b72&Te6edf3textTb4b4b4[Te6edf3lastDrawnPosTb4b4b4]Tb4b4b4, Te6edf3length Tff7b72- Te6edf3lastDrawnPosTb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3drawStringResult Tff7b72=Tff7b72= T79c0ff0 Tff7b72|Tff7b72| Tb4b4b4(Te6edf3yMove Tff7b72+ Te6edf3lineNumber Tff7b72* Te6edf3lineHeightTb4b4b4) Tff7b72>Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) T8b949e// text did not fit on screen
Tff7b72return Te6edf3firstLineCharsTb4b4b4;
Tff7b72return T79c0ff0Tb4b4b4; T8b949e// everything was drawn
Tb4b4b4}

Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3getStringWidthTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3textTb4b4b4, Tffa657uint16_t Te6edf3lengthTb4b4b4, Tffa657bool Te6edf3utf8Tb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3firstChar Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3FIRST_CHAR_POSTb4b4b4)Tb4b4b4;

Tffa657uint16_t Te6edf3stringWidth Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3maxWidth Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3lengthTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657char Te6edf3c Tff7b72= Te6edf3textTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3utf8Tb4b4b4) Tb4b4b4{
Te6edf3c Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3fontTableLookupFunctionTb4b4b4)Tb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72continueTb4b4b4;
Tb4b4b4}
Te6edf3stringWidth Tff7b72+Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3JUMPTABLE_START Tff7b72+ Tb4b4b4(Te6edf3c Tff7b72- Te6edf3firstCharTb4b4b4) Tff7b72* Te6edf3JUMPTABLE_BYTES Tff7b72+ Te6edf3JUMPTABLE_WIDTHTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= T79c0ff10Tb4b4b4) Tb4b4b4{
Te6edf3maxWidth Tff7b72= Te6edf3maxTb4b4b4(Te6edf3maxWidthTb4b4b4, Te6edf3stringWidthTb4b4b4)Tb4b4b4;
Te6edf3stringWidth Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72return Te6edf3maxTb4b4b4(Te6edf3maxWidthTb4b4b4, Te6edf3stringWidthTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3getStringWidthTb4b4b4(Tff7b72const Te6edf3String Tff7b72&Te6edf3strUserTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3width Tff7b72= Te6edf3getStringWidthTb4b4b4(Te6edf3strUserTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3strUserTb4b4b4.Te6edf3lengthTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3widthTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setTextAlignmentTb4b4b4(Te6edf3OLEDDISPLAY_TEXT_ALIGNMENT Te6edf3textAlignmentTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3textAlignment Tff7b72= Te6edf3textAlignmentTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setFontTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3fontDataTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3fontData Tff7b72= Te6edf3fontDataTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3displayOnTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYONTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3displayOffTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYOFFTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3invertDisplayTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3INVERTDISPLAYTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3normalDisplayTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3NORMALDISPLAYTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setContrastTb4b4b4(Tffa657uint8_t Te6edf3contrastTb4b4b4, Tffa657uint8_t Te6edf3prechargeTb4b4b4, Tffa657uint8_t Te6edf3comdetectTb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3SETPRECHARGETb4b4b4)Tb4b4b4; T8b949e//0xD9
Te6edf3sendCommandTb4b4b4(Te6edf3prechargeTb4b4b4)Tb4b4b4; T8b949e//0xF1 default, to lower the contrast, put 1-1F
Te6edf3sendCommandTb4b4b4(Te6edf3SETCONTRASTTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3contrastTb4b4b4)Tb4b4b4; T8b949e// 0-255
Te6edf3sendCommandTb4b4b4(Te6edf3SETVCOMDETECTTb4b4b4)Tb4b4b4; T8b949e//0xDB, (additionally needed to lower the contrast)
Te6edf3sendCommandTb4b4b4(Te6edf3comdetectTb4b4b4)Tb4b4b4; T8b949e//0x40 default, to lower the contrast, put 0
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYALLON_RESUMETb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3NORMALDISPLAYTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYONTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setBrightnessTb4b4b4(Tffa657uint8_t Te6edf3brightnessTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3contrast Tff7b72= Te6edf3brightnessTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3brightness Tff7b72< T79c0ff128Tb4b4b4) Tb4b4b4{
T8b949e// Magic values to get a smooth/ step-free transition
Te6edf3contrast Tff7b72= Te6edf3brightness Tff7b72* T79c0ff1.171Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3contrast Tff7b72= Te6edf3brightness Tff7b72* T79c0ff1.171 Tff7b72- T79c0ff43Tb4b4b4;
Tb4b4b4}

Tffa657uint8_t Te6edf3precharge Tff7b72= T79c0ff241Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3brightness Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3precharge Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657uint8_t Te6edf3comdetect Tff7b72= Te6edf3brightness Tff7b72/ T79c0ff8Tb4b4b4;

Te6edf3setContrastTb4b4b4(Te6edf3contrastTb4b4b4, Te6edf3prechargeTb4b4b4, Te6edf3comdetectTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3resetOrientationTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3SEGREMAPTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3COMSCANINCTb4b4b4)Tb4b4b4; T8b949e//Reset screen rotation or mirroring
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3flipScreenVerticallyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3SEGREMAP Tff7b72| T79c0ff0x01Tb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3COMSCANDECTb4b4b4)Tb4b4b4; T8b949e//Rotate screen 180 Deg
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3mirrorScreenTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(Te6edf3SEGREMAPTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3COMSCANDECTb4b4b4)Tb4b4b4; T8b949e//Mirror screen
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3clearTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3memsetTb4b4b4(Te6edf3bufferTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3displayBufferSizeTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawLogBufferTb4b4b4(Tffa657uint16_t Te6edf3xMoveTb4b4b4, Tffa657uint16_t Te6edf3yMoveTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3lineHeight Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3HEIGHT_POSTb4b4b4)Tb4b4b4;
T8b949e// Always align left
Te6edf3setTextAlignmentTb4b4b4(Te6edf3TEXT_ALIGN_LEFTTb4b4b4)Tb4b4b4;

T8b949e// State values
Tffa657uint16_t Te6edf3length Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3line Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3lastPos Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3iTff7b72=T79c0ff0Tb4b4b4;Te6edf3iTff7b72<Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilledTb4b4b4;Te6edf3iTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4{
T8b949e// Every time we have a \n print
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= T79c0ff10Tb4b4b4) Tb4b4b4{
Te6edf3lengthTff7b72+Tff7b72+Tb4b4b4;
T8b949e// Draw string on line `line` from lastPos to length
T8b949e// Passing 0 as the length because we are in TEXT_ALIGN_LEFT
Te6edf3drawStringInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMove Tff7b72+ Tb4b4b4(Te6edf3lineTff7b72+Tff7b72+Tb4b4b4) Tff7b72* Te6edf3lineHeightTb4b4b4, Tff7b72&Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4[Te6edf3lastPosTb4b4b4]Tb4b4b4, Te6edf3lengthTb4b4b4, T79c0ff0Tb4b4b4, Tffa657falseTb4b4b4)Tb4b4b4;
T8b949e// Remember last pos
Te6edf3lastPos Tff7b72= Te6edf3iTb4b4b4;
T8b949e// Reset length
Te6edf3length Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// Count chars until next linebreak
Te6edf3lengthTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// Draw the remaining string
Tff7b72if Tb4b4b4(Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3drawStringInternalTb4b4b4(Te6edf3xMoveTb4b4b4, Te6edf3yMove Tff7b72+ Te6edf3line Tff7b72* Te6edf3lineHeightTb4b4b4, Tff7b72&Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4[Te6edf3lastPosTb4b4b4]Tb4b4b4, Te6edf3lengthTb4b4b4, T79c0ff0Tb4b4b4, Tffa657falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3getWidthTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3displayWidthTb4b4b4;
Tb4b4b4}

Tffa657uint16_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3getHeightTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3displayHeightTb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setLogBufferTb4b4b4(Tffa657uint16_t Te6edf3linesTb4b4b4, Tffa657uint16_t Te6edf3charsTb4b4b4)Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3logBuffer Tff7b72!Tff7b72= Tffa657NULLTb4b4b4) Te6edf3freeTb4b4b4(Te6edf3logBufferTb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3size Tff7b72= Te6edf3lines Tff7b72* Te6edf3charsTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferLine Tff7b72= T79c0ff0Tb4b4b4; T8b949e// Lines printed
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilled Tff7b72= T79c0ff0Tb4b4b4; T8b949e// Nothing stored yet
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferMaxLines Tff7b72= Te6edf3linesTb4b4b4; T8b949e// Lines max printable
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferSize Tff7b72= Te6edf3sizeTb4b4b4; T8b949e// Total number of characters the buffer can hold
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBuffer Tff7b72= Tb4b4b4(Tffa657char Tff7b72*Tb4b4b4) Te6edf3mallocTb4b4b4(Te6edf3size Tff7b72* Tff7b72sizeofTb4b4b4(Tffa657uint8_tTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72ifTb4b4b4(Tff7b72!Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4) Tb4b4b4{
Te6edf3DEBUG_OLEDDISPLAYTb4b4b4(Ta5d6ff"Ta5d6ff[OLEDDISPLAY][setLogBuffer] Not enough memory to create log bufferTffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

Tffa657size_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3writeTb4b4b4(Tffa657uint8_t Te6edf3cTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferSize Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
T8b949e// Don't waste space on \r\n line endings, dropping \r
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= T79c0ff13Tb4b4b4) Tff7b72return T79c0ff1Tb4b4b4;

T8b949e// convert UTF-8 character to font table index
Te6edf3c Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3fontTableLookupFunctionTb4b4b4)Tb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4;
T8b949e// drop unknown character
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return T79c0ff1Tb4b4b4;

Tffa657bool Te6edf3maxLineNotReached Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferLine Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferMaxLinesTb4b4b4;
Tffa657bool Te6edf3bufferNotFull Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilled Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferSizeTb4b4b4;

T8b949e// Can we write to the buffer?
Tff7b72if Tb4b4b4(Te6edf3bufferNotFull Tff7b72&Tff7b72& Te6edf3maxLineNotReachedTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4[Te6edf3logBufferFilledTb4b4b4] Tff7b72= Te6edf3cTb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilledTff7b72+Tff7b72+Tb4b4b4;
T8b949e// Keep track of lines written
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= T79c0ff10Tb4b4b4) Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferLineTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// Max line number is reached
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3maxLineNotReachedTb4b4b4) Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferLineTff7b72-Tff7b72-Tb4b4b4;

T8b949e// Find the end of the first line
Tffa657uint16_t Te6edf3firstLineEnd Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3iTff7b72=T79c0ff0Tb4b4b4;Te6edf3iTff7b72<Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilledTb4b4b4;Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4[Te6edf3iTb4b4b4] Tff7b72=Tff7b72= T79c0ff10Tb4b4b4)Tb4b4b4{
T8b949e// Include last char too
Te6edf3firstLineEnd Tff7b72= Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// If there was a line ending
Tff7b72if Tb4b4b4(Te6edf3firstLineEnd Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
T8b949e// Calculate the new logBufferFilled value
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilled Tff7b72= Te6edf3logBufferFilled Tff7b72- Te6edf3firstLineEndTb4b4b4;
T8b949e// Now we move the lines infront of the buffer
Te6edf3memcpyTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4, Tff7b72&Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferTb4b4b4[Te6edf3firstLineEndTb4b4b4]Tb4b4b4, Te6edf3logBufferFilledTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// Let's reuse the buffer if it was full
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3bufferNotFullTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3logBufferFilled Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}T8b949e// else {
T8b949e// Nothing to do here
T8b949e//}
Tb4b4b4}
Te6edf3writeTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// We are always writing all uint8_t to the buffer
Tff7b72return T79c0ff1Tb4b4b4;
Tb4b4b4}

Tffa657size_t Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3writeTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3str Tff7b72=Tff7b72= Tffa657NULLTb4b4b4) Tff7b72return T79c0ff0Tb4b4b4;
Tffa657size_t Te6edf3length Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657size_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3lengthTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3writeTb4b4b4(Te6edf3strTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3lengthTb4b4b4;
Tb4b4b4}

Tff7b72#Tff7b72ifdef __MBED__
Tffa657int Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3_putcTb4b4b4(Tffa657int Te6edf3cTb4b4b4) Tb4b4b4{

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fontDataTb4b4b4)
Tff7b72return T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3logBufferSizeTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3textHeight Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3fontData Tff7b72+ Te6edf3HEIGHT_POSTb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3lines Tff7b72= Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72/ Te6edf3textHeightTb4b4b4;
Tffa657uint16_t Te6edf3chars Tff7b72= T79c0ff2 Tff7b72* Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72/ Te6edf3textHeightTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72% Te6edf3textHeightTb4b4b4)
Te6edf3linesTff7b72+Tff7b72+Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72% Te6edf3textHeightTb4b4b4)
Te6edf3charsTff7b72+Tff7b72+Tb4b4b4;
Te6edf3setLogBufferTb4b4b4(Te6edf3linesTb4b4b4, Te6edf3charsTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72return Tff7b72thisTff7b72-Tff7b72>Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3cTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif

T8b949e// Private functions
Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setGeometryTb4b4b4(Te6edf3OLEDDISPLAY_GEOMETRY Te6edf3gTb4b4b4, Tffa657uint16_t Te6edf3widthTb4b4b4, Tffa657uint16_t Te6edf3heightTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3geometry Tff7b72= Te6edf3gTb4b4b4;

Tff7b72switch Tb4b4b4(Te6edf3gTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72GEOMETRY_128_128Tb4b4b4:
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72= T79c0ff128Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72= T79c0ff128Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72GEOMETRY_128_64Tb4b4b4:
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72= T79c0ff128Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72= T79c0ff64Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72GEOMETRY_128_32Tb4b4b4:
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72= T79c0ff128Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72= T79c0ff32Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72GEOMETRY_64_48Tb4b4b4:
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72= T79c0ff64Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72= T79c0ff48Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72GEOMETRY_64_32Tb4b4b4:
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72= T79c0ff64Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72= T79c0ff32Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72GEOMETRY_RAWMODETb4b4b4:
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayWidth Tff7b72= Te6edf3width Tff7b72> T79c0ff0 Tff7b72? Te6edf3width Tff7b72: T79c0ff128Tb4b4b4;
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayHeight Tff7b72= Te6edf3height Tff7b72> T79c0ff0 Tff7b72? Te6edf3height Tff7b72: T79c0ff64Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tff7b72thisTff7b72-Tff7b72>Te6edf3displayBufferSize Tff7b72= Te6edf3displayWidth Tff7b72* Te6edf3displayHeight Tff7b72/ T79c0ff8Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3sendInitCommandsTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_RAWMODETb4b4b4)
Tff7b72returnTb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYOFFTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3SETDISPLAYCLOCKDIVTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(T79c0ff0xF0Tb4b4b4)Tb4b4b4; T8b949e// Increase speed of the display max ~96Hz
Te6edf3sendCommandTb4b4b4(Te6edf3SETMULTIPLEXTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4) Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3SETDISPLAYOFFSETTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(T79c0ff0x00Tb4b4b4)Tb4b4b4;
Tff7b72ifTb4b4b4(Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_64_32Tb4b4b4)
Te6edf3sendCommandTb4b4b4(T79c0ff0x00Tb4b4b4)Tb4b4b4;
Tff7b72else
Te6edf3sendCommandTb4b4b4(Te6edf3SETSTARTLINETb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3CHARGEPUMPTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(T79c0ff0x14Tb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3MEMORYMODETb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(T79c0ff0x00Tb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3SEGREMAPTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3COMSCANINCTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3SETCOMPINSTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_128_128 Tff7b72|Tff7b72| Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_128_64 Tff7b72|Tff7b72| Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_64_48 Tff7b72|Tff7b72| Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_64_32Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(T79c0ff0x12Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_128_32Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(T79c0ff0x02Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3sendCommandTb4b4b4(Te6edf3SETCONTRASTTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_128_128 Tff7b72|Tff7b72| Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_128_64 Tff7b72|Tff7b72| Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_64_48 Tff7b72|Tff7b72| Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_64_32Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(T79c0ff0xCFTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3geometry Tff7b72=Tff7b72= Te6edf3GEOMETRY_128_32Tb4b4b4) Tb4b4b4{
Te6edf3sendCommandTb4b4b4(T79c0ff0x8FTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3sendCommandTb4b4b4(Te6edf3SETPRECHARGETb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(T79c0ff0xF1Tb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3SETVCOMDETECTTb4b4b4)Tb4b4b4; T8b949e//0xDB, (additionally needed to lower the contrast)
Te6edf3sendCommandTb4b4b4(T79c0ff0x40Tb4b4b4)Tb4b4b4; T8b949e//0x40 default, to lower the contrast, put 0
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYALLON_RESUMETb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(Te6edf3NORMALDISPLAYTb4b4b4)Tb4b4b4;
Te6edf3sendCommandTb4b4b4(T79c0ff0x2eTb4b4b4)Tb4b4b4; T8b949e// stop scroll
Te6edf3sendCommandTb4b4b4(Te6edf3DISPLAYONTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Tff7b72inline Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3drawInternalTb4b4b4(Tffa657int16_t Te6edf3xMoveTb4b4b4, Tffa657int16_t Te6edf3yMoveTb4b4b4, Tffa657int16_t Te6edf3widthTb4b4b4, Tffa657int16_t Te6edf3heightTb4b4b4, Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3dataTb4b4b4, Tffa657uint16_t Te6edf3offsetTb4b4b4, Tffa657uint16_t Te6edf3bytesInDataTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3width Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3height Tff7b72< T79c0ff0Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3yMove Tff7b72+ Te6edf3height Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3yMove Tff7b72> Tff7b72thisTff7b72-Tff7b72>Te6edf3heightTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3xMove Tff7b72+ Te6edf3width Tff7b72< T79c0ff0 Tff7b72|Tff7b72| Te6edf3xMove Tff7b72> Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;

Tffa657uint8_t Te6edf3rasterHeight Tff7b72= T79c0ff1 Tff7b72+ Tb4b4b4(Tb4b4b4(Te6edf3height Tff7b72- T79c0ff1Tb4b4b4) Tff7b72>Tff7b72> T79c0ff3Tb4b4b4)Tb4b4b4; T8b949e// fast ceil(height / 8.0)
Tffa657int8_t Te6edf3yOffset Tff7b72= Te6edf3yMove Tff7b72& T79c0ff7Tb4b4b4;

Te6edf3bytesInData Tff7b72= Te6edf3bytesInData Tff7b72=Tff7b72= T79c0ff0 Tff7b72? Te6edf3width Tff7b72* Te6edf3rasterHeight Tff7b72: Te6edf3bytesInDataTb4b4b4;

Tffa657int16_t Te6edf3initYMove Tff7b72= Te6edf3yMoveTb4b4b4;
Tffa657int8_t Te6edf3initYOffset Tff7b72= Te6edf3yOffsetTb4b4b4;


Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3bytesInDataTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{

T8b949e// Reset if next horizontal drawing phase is started.
Tff7b72if Tb4b4b4( Te6edf3i Tff7b72% Te6edf3rasterHeight Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3yMove Tff7b72= Te6edf3initYMoveTb4b4b4;
Te6edf3yOffset Tff7b72= Te6edf3initYOffsetTb4b4b4;
Tb4b4b4}

Tffa657uint8_t Te6edf3currentByte Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3data Tff7b72+ Te6edf3offset Tff7b72+ Te6edf3iTb4b4b4)Tb4b4b4;

Tffa657int16_t Te6edf3xPos Tff7b72= Te6edf3xMove Tff7b72+ Tb4b4b4(Te6edf3i Tff7b72/ Te6edf3rasterHeightTb4b4b4)Tb4b4b4;
Tffa657int16_t Te6edf3yPos Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3yMove Tff7b72>Tff7b72> T79c0ff3Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3i Tff7b72% Te6edf3rasterHeightTb4b4b4)Tb4b4b4) Tff7b72* Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// int16_t yScreenPos = yMove + yOffset;
Tffa657int16_t Te6edf3dataPos Tff7b72= Te6edf3xPos Tff7b72+ Te6edf3yPosTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3dataPos Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3dataPos Tff7b72< Te6edf3displayBufferSize Tff7b72&Tff7b72&
Te6edf3xPos Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3xPos Tff7b72< Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4) Tb4b4b4) Tb4b4b4{

Tff7b72if Tb4b4b4(Te6edf3yOffset Tff7b72>Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPosTb4b4b4] Tff7b72|Tff7b72= Te6edf3currentByte Tff7b72<Tff7b72< Te6edf3yOffsetTb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPosTb4b4b4] Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(Te6edf3currentByte Tff7b72<Tff7b72< Te6edf3yOffsetTb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPosTb4b4b4] Tff7b72^Tff7b72= Te6edf3currentByte Tff7b72<Tff7b72< Te6edf3yOffsetTb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3dataPos Tff7b72< Tb4b4b4(Te6edf3displayBufferSize Tff7b72- Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPos Tff7b72+ Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72|Tff7b72= Te6edf3currentByte Tff7b72>Tff7b72> Tb4b4b4(T79c0ff8 Tff7b72- Te6edf3yOffsetTb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPos Tff7b72+ Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(Te6edf3currentByte Tff7b72>Tff7b72> Tb4b4b4(T79c0ff8 Tff7b72- Te6edf3yOffsetTb4b4b4)Tb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPos Tff7b72+ Tff7b72thisTff7b72-Tff7b72>Te6edf3widthTb4b4b4(Tb4b4b4)Tb4b4b4] Tff7b72^Tff7b72= Te6edf3currentByte Tff7b72>Tff7b72> Tb4b4b4(T79c0ff8 Tff7b72- Te6edf3yOffsetTb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// Make new offset position
Te6edf3yOffset Tff7b72= Tff7b72-Te6edf3yOffsetTb4b4b4;

Tff7b72switch Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3colorTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72WHITETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPosTb4b4b4] Tff7b72|Tff7b72= Te6edf3currentByte Tff7b72>Tff7b72> Te6edf3yOffsetTb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72BLACKTb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPosTb4b4b4] Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(Te6edf3currentByte Tff7b72>Tff7b72> Te6edf3yOffsetTb4b4b4)Tb4b4b4; Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72INVERSETb4b4b4: Te6edf3bufferTb4b4b4[Te6edf3dataPosTb4b4b4] Tff7b72^Tff7b72= Te6edf3currentByte Tff7b72>Tff7b72> Te6edf3yOffsetTb4b4b4; Tff7b72breakTb4b4b4;
Tb4b4b4}

T8b949e// Prepare for next iteration by moving one block up
Te6edf3yMove Tff7b72-Tff7b72= T79c0ff8Tb4b4b4;

T8b949e// and setting the new yOffset
Te6edf3yOffset Tff7b72= T79c0ff8 Tff7b72- Te6edf3yOffsetTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72ifndef __MBED__
Te6edf3yieldTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// You need to free the char!
Tffa657charTff7b72* Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3utf8asciiTb4b4b4(Tff7b72const Te6edf3String Tff7b72&Te6edf3strTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3k Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint16_t Te6edf3length Tff7b72= Te6edf3strTb4b4b4.Te6edf3lengthTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4;

T8b949e// Copy the string into a char array
Tffa657charTff7b72* Te6edf3s Tff7b72= Tb4b4b4(Tffa657charTff7b72*Tb4b4b4) Te6edf3mallocTb4b4b4(Te6edf3length Tff7b72* Tff7b72sizeofTb4b4b4(Tffa657charTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72ifTb4b4b4(Tff7b72!Te6edf3sTb4b4b4) Tb4b4b4{
Te6edf3DEBUG_OLEDDISPLAYTb4b4b4(Ta5d6ff"Ta5d6ff[OLEDDISPLAY][utf8ascii] Can't allocate another char array. Drop support for UTF-8.Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4(Tffa657charTff7b72*Tb4b4b4) Te6edf3strTb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3strTb4b4b4.Te6edf3toCharArrayTb4b4b4(Te6edf3sTb4b4b4, Te6edf3lengthTb4b4b4)Tb4b4b4;

Te6edf3lengthTff7b72-Tff7b72-Tb4b4b4;

Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3iTff7b72=T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3lengthTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657char Te6edf3c Tff7b72= Tb4b4b4(Tff7b72thisTff7b72-Tff7b72>Te6edf3fontTableLookupFunctionTb4b4b4)Tb4b4b4(Te6edf3sTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3cTff7b72!Tff7b72=T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3sTb4b4b4[Te6edf3kTff7b72+Tff7b72+Tb4b4b4]Tff7b72=Te6edf3cTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3sTb4b4b4[Te6edf3kTb4b4b4]Tff7b72=T79c0ff0Tb4b4b4;

T8b949e// This will leak 's' be sure to free it in the calling function.
Tff7b72return Te6edf3sTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3OLEDDisplayTff7b72:Tff7b72:Te6edf3setFontTableLookupFunctionTb4b4b4(Te6edf3FontTableLookupFunction Te6edf3functionTb4b4b4) Tb4b4b4{
Tff7b72thisTff7b72-Tff7b72>Te6edf3fontTableLookupFunction Tff7b72= Te6edf3functionTb4b4b4;
Tb4b4b4}


Tffa657char Te6edf3DefaultFontTableLookupTb4b4b4(Tff7b72const Tffa657uint8_t Te6edf3chTb4b4b4) Tb4b4b4{
T8b949e// UTF-8 to font table index converter
T8b949e// Code from http://playground.arduino.cc/Main/Utf8ascii
Tff7b72static Tffa657uint8_t Te6edf3LASTCHARTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3ch Tff7b72< T79c0ff128Tb4b4b4) Tb4b4b4{ T8b949e// Standard ASCII-set 0..0x7F handling
Te6edf3LASTCHAR Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72return Te6edf3chTb4b4b4;
Tb4b4b4}

Tffa657uint8_t Te6edf3last Tff7b72= Te6edf3LASTCHARTb4b4b4; T8b949e// get last char
Te6edf3LASTCHAR Tff7b72= Te6edf3chTb4b4b4;

Tff7b72switch Tb4b4b4(Te6edf3lastTb4b4b4) Tb4b4b4{ T8b949e// conversion depending on first UTF8-character
Tff7b72case T79c0ff0xC2Tb4b4b4: Tff7b72return Tb4b4b4(Tffa657uint8_tTb4b4b4) Te6edf3chTb4b4b4;
Tff7b72case T79c0ff0xC3Tb4b4b4: Tff7b72return Tb4b4b4(Tffa657uint8_tTb4b4b4) Tb4b4b4(Te6edf3ch Tff7b72| T79c0ff0xC0Tb4b4b4)Tb4b4b4;
Tff7b72case T79c0ff0x82Tb4b4b4: Tff7b72if Tb4b4b4(Te6edf3ch Tff7b72=Tff7b72= T79c0ff0xACTb4b4b4) Tff7b72return Tb4b4b4(Tffa657uint8_tTb4b4b4) T79c0ff0x80Tb4b4b4; T8b949e// special case Euro-symbol
Tb4b4b4}

Tff7b72return Tb4b4b4(Tffa657uint8_tTb4b4b4) T79c0ff0Tb4b4b4; T8b949e// otherwise: return zero, if character has to be ignored
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.2s